// -*- coding: utf-8 -*- 
/**
 * Project: AlgorithmsLearn
 *
 * @author: yanking
 * Create time: 2022-03-09 20:03
 * IDE: IntelliJ IDEA
 * Introduction:
 */
package com.LeetCodeT.DynamicPlan;

import java.util.ArrayList;
import java.util.List;

public class Generate {
    /**
     * 杨辉三角
     *
     * @param numRows 要求生成杨辉三角的行数
     * @return 返回生成的杨辉三角
     */
    public List<List<Integer>> generate(int numRows) {
        // 动态规划 nums[n][k] = nums[n-1][k-1] + nums[n][k]
        List<List<Integer>> ans = new ArrayList<>();
        for (int i = 1; i <= numRows; i++) {
            List<Integer> tmp = new ArrayList<>();
            for (int j = 0; j < i; j++) {
                if (j == 0 || j == i - 1) {
                    // 当前位置是边界
                    tmp.add(1);
                } else {
                    // 当前位置不是边界,根据动态规划公示求出当前值
                    tmp.add(ans.get(i - 2).get(j - 1) + ans.get(i - 2).get(j));
                }
            }
            ans.add(tmp);
        }
        List<List<Integer>> res = new ArrayList<>();
        return ans;
    }


    /**
     * 返回杨辉三角指定行
     */
    public List<Integer> getRow(int rowIndex) {
        // 生成杨辉三角，再获取指定行
        // 动态规划 nums[n][k] = nums[n-1][k-1] + nums[n][k]
        List<List<Integer>> ans = new ArrayList<>();
        for (int i = 1; i <= rowIndex; i++) {
            List<Integer> tmp = new ArrayList<>();
            for (int j = 0; j < i; j++) {
                if (j == 0 || j == i - 1) {
                    // 当前位置是边界
                    tmp.add(1);
                } else {
                    // 当前位置不是边界,根据动态规划公示求出当前值
                    tmp.add(ans.get(i - 2).get(j - 1) + ans.get(i - 2).get(j));
                }
            }
            ans.add(tmp);
        }

        return ans.get(rowIndex);
    }
}
